/*********************************************************************************************
* 文件: emwin_thread.c
* 作者：Zhouchj 2020.10.10
* 说明：emWin操作定时器源文件
* 修改：
* 注释：
*********************************************************************************************/
#include "emwin_thread.h"
#include "GUI.h"
#include "WM.h"
#include "drv_lcd/drv_lcd.h"

/*********************************************************************************************
* 名称：emwin_timer_handle()
* 功能：emWin定时器超时回调函数
* 参数：*parameter -> 传入参数(暂无)
* 返回：无
* 修改：
* 注释：
*********************************************************************************************/
void emwin_timer_handle(void *parameter)
{
  (void)parameter;
  static unsigned char count = 0;
  count++;
  if(count % 2 == 0)
    GUI_Exec();                                                 // 执行所有挂起的 emWin 任务
#if EMWIN_USE_TOUCH                                             // 是否使用触摸屏
  GUI_TOUCH_Exec();                                             // 传输触摸信息到 emWin
#endif
}

/*********************************************************************************************
* 名称：emwin_init()
* 功能：emWin初始化
* 参数：无
* 返回：无
* 修改：
* 注释：
*********************************************************************************************/
void emwin_init(void)
{
  __HAL_RCC_CRC_CLK_ENABLE();                                   // 开启CRC时钟
  GUI_Init();                                                   // emWin初始化
  WM_SetCreateFlags(WM_CF_MEMDEV);                              // 窗口启用内存设备
  GUI_UC_SetEncodeUTF8();                                       // 使用UTF-8编码
}

/*********************************************************************************************
* 名称：emwin_timer_init()
* 功能：emWin定时器初始化
* 参数：无
* 返回：初始化是否成功
* 修改：
* 注释：
*********************************************************************************************/
int emwin_timer_init(void)
{
  LCD_DriverInit();                                             // LCD初始化
  emwin_init();                                                 // emwin初始化

  rt_timer_t emwin_timer = RT_NULL;
  
  emwin_timer = rt_timer_create("emwin",                        // 线程名称
                                emwin_timer_handle,             // 定时器超时入口函数
                                RT_NULL,                        // 入口函数传入参数
                                10,                             // 超时时间
                                RT_TIMER_FLAG_PERIODIC);        // 周期循环
  if(emwin_timer == RT_NULL)
    return -1;
  return rt_timer_start(emwin_timer);                           // 启动定时器
}
